Search Results: "David Welton"

6 December 2009

David Welton: So Long, Debian

I went ahead and officially retired from Debian today. It's something I probably ought to have done a while ago, but have been putting off. I've had some great times with Debian and met a lot of good people. Debian is also where I really got my start with free software. For me, and others, Debian is something of a stepping stone: it's fairly easy to start packaging up some program, and before you know it, you're hooked on the whole open source thing. These days I mostly use Ubuntu, but hold Debian in very high regard in terms of the technical quality. And I'm also glad that they've held the line on free software over the years: with a Debian CD, I know I can make as many copies as I want for anyone, and use it both myself and for whatever commercial applications my clients need. How cool is that?

24 November 2009

David Welton: Google Design Annoyance

I'm the last person in the world to have much of anything to say about visual design, but this one is so blatant that even I can't help but notice: Adsense Analytics See the big blue button in the same place? In one case, it is a 'sign up' button, in the other it is an 'enter if you already have an account button'. This is visually confusing for those (and there are a lot of us, I'm sure), who use both products.

16 November 2009

David Welton: Emacs fiddling: show the menu-bar when the mouse is near the top of the frame

My wife is having dinner with the baby at her parents', so I took a moment to do a bit of pure, pointless, fun hacking after reading a discussion of which emacs gui features to turn off on a site I frequent. I turn off the tool bar and the scroll bar to get as much screen real estate as possible, but leave the menu bar on, because it doesn't take up that much space, and I occasionally use it to grab some little used feature whose full function name I don't recall. My idea: make the menu bar appear only if the mouse is in that general vicinity. This initial implementation is hacky and doesn't work quite right; but it shouldn't take much to make it work. It's probably actually already been done somewhere, but it was fun to hack up something for the sake of hacking... something I don't get enough time for these days.
    (defun menu-bar-show-hide-helper ()
      (if (< (cddr (mouse-pixel-position)) 20)
      (menu-bar-mode 1)
    (menu-bar-mode 0)))
    (defun menu-bar-show-hide ()
      (run-with-idle-timer 0.1 t 'menu-bar-show-hide-helper))
I'll add fixes and updates as they are sent in.

26 October 2009

David Welton: The Economist on "Management Gurus"

One of the reasons why I created Squeezed Books was to "deflate" some of the hot air present in many business books, so I particularly enjoyed The Economist's cynical take on "management gurus": The three habits of highly irritating management gurus
The first is presenting stale ideas as breathtaking breakthroughs ... The second irritating habit is that of naming model firms. Mr Covey littered his speech in London with references to companies he thinks are outstandingly well managed, including, bizarrely, General Motors Saturn division, which is going out of business. ... The gurus routinely ignore such basic precautions as providing a control group. ... The third irritating habit is the flogging of management tools off the back of numbered lists or facile principles. ...
And their conclusion is spot on:
Which points to the most irritating thing of all about management gurus: that their failures only serve to stoke demand for their services. If management could indeed be reduced to a few simple principles, then we would have no need for management thinkers. But the very fact that it defies easy solutions, leaving managers in a perpetual state of angst, means that there will always be demand for books like Mr Covey s.

24 September 2009

David Welton: LangPop.com Updates

It took me a while to get the September update of LangPop.com out. The reason: I had to redo the book statistics. Previously, I got those from Amazon's web service, which worked ok as far as those things go. However, recently, I ran into several problems:
  • They started requiring signatures on the requests, which meant I had to stop and fiddle with my code, which I did not appreciate. (If you have this problem and use Ruby, get the amazon-ecs Ruby gem)
  • Their results suffered from some kind of regression in any case: C, C# and C++ all showed up with the same number of results. They didn't use to show the same numbers. Not good from my point of view.
  • They were completely unresponsive to requests for information or help.
  • And for good measure, they hid their information about their products API on some other web site, with no links from their web services page, which makes it kind of annoying to look for it, and suspicious that they may be removing it at some point in the future.
All of these together made me decide it was time to switch data providers. Where to go? The answer was obvious: back to my home state of Oregon, to Powell's Books, a huge independent book seller. If you ever go to Portland, do yourself a favor and go to Powell's. It is a city block full of books on multiple floors. When I lived in Portland, I would go there before eating to give myself a reason to leave (although they do have a cafe...). And that's just the regular book store. They have another huge space a few blocks away dedicated entirely to technical books. Powell's is one of my favorite things in Oregon, and a great experience. Anyway, I decided that they're big enough, and do enough business online that I'd ask them about getting data, so I sent some email asking after what options were available. I got a very helpful answer from a real person, CJ Stritzel, who was kind enough to explain what the options were, and work with me to help find the best one for what I needed. Definitely better than "/dev/null", the Amazon message board! The API is still something they're working on, but it works well enough for what I need, and I'm quite happy with the situation. It has caused some changes in the rankings, though: they show Java books as being by far and away the most popular, which has pushed that language into the top spot in the rankings. We'll see over the coming months; I may rework the queries I'm using some as their API stabilizes and I experiment with different combinations of keywords. In any case, thanks Powell's, and enjoy the new statistics everyone.

15 September 2009

David Welton: Tcl and the Tk Toolkit, 2nd edition

<iframe frameborder="0" marginheight="0" marginwidth="0" scrolling="no" src="http://rcm.amazon.com/e/cm?lt1=_blank&amp;bc1=000000&amp;IS2=1&amp;bg1=FFFFFF&amp;fc1=000000&amp;lc1=0000FF&amp;t=dedasys-20&amp;o=1&amp;p=8&amp;l=as1&amp;m=amazon&amp;f=ifr&amp;md=10FE9736YVPPT7A0FBG2&amp;asins=032133633X" style="width:120px;height:240px; float: left; padding-bottom: 10px; padding-right: 10px;"></iframe> I'm not sure what I was expecting, but the news that "my" book is finally out is cause for excitement, anxiety, and relief. It's not actually "my" book at all; it was originally written by Dr. John Ousterhout, who created the Tcl programming language, and the Tk toolkit. And Ken Jones is listed as the co author of the 2nd edition, because he's the guy that pulled everything together and managed to actually bring the project to fruition. However, I did play a part a part in the project. About 5 years ago, I was doing a lot with Tcl, and then, as now, I thought it was a shame that the language was not promoted as well as it could be. It's not a perfect language, but at nearly 20 years old, it has stood the test of time, and it has a lot going for it. In any case, at the time, I had noticed that there was no good, publicly available tutorial. Tcl has always had an excellent set of man pages describing all of its various commands and subsystems, but did not ship with a tutorial that would help new users get started. I thought that that would be a good problem to solve in order to make the language more attractive to newcomers. However, writing a tutorial from scratch is no simple task, so I started looking around for material that might be adapted. One thing that sprung to mind was the first edition of "Tcl and the Tk Toolkit". At that point the book was nearly 10 years old, which in tech years is practically forever, and indeed, the material in the book, while good, was quite dated for some portions of Tcl. Figuring it couldn't hurt, I emailed Dr. Ousterhout to see what he thought of open sourcing the book, or at least the first part of it, with the idea of updating and utilizing that as a tutorial. He was actually ok with that idea, but the copyright belonged to the publisher rather than him, so he gave me a contact with the publisher, who I then sent my idea to. They weren't necessarily against the idea of releasing the material under an open license, but came back with another idea: why not update the book? That sounded like an interesting project in its own right. I don't recall all the details (this was in 2004), but the publisher ended up with Ken Jones as the guy to run the project, as he'd participated successfully in updating another popular Tcl book. In the end, there were several of us (Eric Foster-Johnson, Donal Fellows and Brian Griffin, in addition to Ken and myself), that worked on the project, divying things up by sections, with Ken coordinating. I am honored to have my name listed amongst such august company. Which brings me back to being nervous: the idea of having something I wrote "set in stone" is a source of some anxiety for someone like me used to working with such a malleable world as that of software. Also; I wrote most of my contribution (I focused on the C API) several years ago, and I hope it's still valid, and of course that there aren't any huge and glaring errors. For a while, the book seemed like it was in limbo - just when I thought it was dead, Ken would come back with an update. This was also a cause for concern, as I wanted the thing to either die a dignified death, and get on with my life, or appear in print. As for the tutorial, I did manage to make that happen as well. Clif Flynt, who authored a Tcl/Tk book of his own, was kind enough to donate some material from a tutorial of his own, which several of us hacked at to get it into shape. It's available here: http://www.tcl.tk/man/tcl/tutorial/tcltutorial.html In any case, I sincerely hope that the material I wrote manages to do justice to the years and years of work that have gone into the language and its implementation, and hope you find the book valuable if you pick up a copy.

7 September 2009

David Welton: Stopping DocBook Version Control Churn

I have been getting frustrated with DocBook's generation of HTML files, because it seems to gratuitously insert random id's for things in a pattern that doesn't repeat, so you run xsltproc on the same file twice, and the output changes. subversion, git, etc... pick up on the differences and want to save the new version, which is quite annoying. I figured out a way to get around this. I have no idea if it's ugly or not, but it works and that's enough for me. Comments/ideas/improvements welcome.

  
  
  
  
  id-
  
The key is the line:
  id-
which replaces
  
The problem is that generate-id, at least in xsltproc, uses a fairly random bit of data (memory location) to create the id. My fix uses the location of the element within the document as the id.

27 May 2009

David Welton: Objective C vs Cocoa

I've been adding a few things to LangPop.com, specifically ColdFusion (it's not something I'm interested in, but I've had a lot of requests for it...) and Objective C, which is quite popular indeed, thanks to Apple. Indeed, it is Objective C that is a bit problematic: "Cocoa" is more widely used than the name of the language itself! On http://search.yahoo.com, Cocoa programming turns up a lot more hits than Objective C programming:
  • "objective c programming: 71,300
  • "cocoa programming" : 608,000
That's an order of magnitude! Now, on one hand, I aim to measure popularity of the language itself, not of libraries. I simply can't add every popular library, toolkit or framework for every language - it would be a huge task, and would likely only really make the results worse. However, it might not be entirely fair to leave that many actual users uncounted just because they all use Objective C in one particular environment. And just to further complicate things, while most people using Cocoa are writing Objective C code, there are other bindings for it... My inclination, for simplicity's sake, is still to simply go with Objective C. What do you think?

26 May 2009

David Welton: Ovi and Hecl

Granted, Hecl's demo application is not the sort of things end users are going to want to use on a day to day basis, but I thought I'd use it to go through the process and see what I could see about Ovi. Unfortunately, it didn't go well, I got this the other day:
Comments from the QA team: FAILED due to the devices not compatible by OVI store, OVI supported devices are can be found from the link https://publish.ovi.com/help/content_providers (public, Qa in progress -> Qa failed) The file failed QA on the following target(s):
  • Device: Unpublished Protos - XXXxYYY - Another Test Device
Which isn't all that clear, putting it mildly. Hrm. Maybe I'll try with something else just to see what can be seen.

8 May 2009

David Welton: Ruby, Soap4R, WSSE Authentication

I've been doing some work for a client, where we have to interact with a web service front end for Oracle (which also means that everything reflects Oracle's "delightful" shortened table names, like UsrAddrsPhn...). I didn't find a lot out there to do this in Ruby, except this helpful post: http://willcannings.wordpress.com/2008/07/06/wsse-authentication-in-ruby-soap4r/ However, it wasn't quite enough for what we're doing, as we have to deal with a nonce parameter as well. Here's the snippet of code I created:
require 'rubygems'
gem 'soap4r'
require 'base64'
require 'soap/rpc/driver'
require 'soap/wsdlDriver'
wsdl_url = ARGV.shift
proxy    = SOAP::WSDLDriverFactory.new(wsdl_url).create_rpc_driver
# run ruby with -d to see SOAP wiredumps.
proxy.wiredump_dev = STDERR if $DEBUG
require 'soap/header/simplehandler'
require 'soap/element'
require 'xsd/datatypes'
class WsseAuthHeader < SOAP::Header::Handler
  NAMESPACE= 'http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd'
  USERNAME  = 'Not really the username'
  PASSWORD  = 'Put your own password here'
  def initialize()
    super(XSD::QName.new(NAMESPACE, 'Security'))
  end
  def on_outbound
    security = SOAP::SOAPElement.new('wsse:Security')
    security.extraattr['xmlns:wsse'] =
      'http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd'
    unt = SOAP::SOAPElement.new('wsse:UsernameToken')
    unt.extraattr['xmlns:wsu'] =
      'http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd'
    un = SOAP::SOAPElement.new('wsse:Username', USERNAME)
    unt.add(un)
    pw = SOAP::SOAPElement.new('wsse:Password', PASSWORD)
    pw.extraattr['Type'] =
      'http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText'
    unt.add(pw)
    # Create a nonce...
    nonce = SOAP::SOAPElement.new('wsse:Nonce', Base64.encode64((rand() * 1000000000).to_i.to_s))
    nonce.extraattr['EncodingType'] =
      'http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-soap-message-security-1.0#Base64Binary'
    unt.add(nonce)
    # The time format returned by XSDDateTime isn't quite right, so we
    # fiddle with it a bit.
    unt.add(SOAP::SOAPElement.new('wsu:Created',
                                  XSD::XSDDateTime.new(Time.now.utc - 30).to_s.gsub(/..*/, "") + "Z"))
    security.add(unt)
    return SOAP::SOAPHeaderItem.new(security, true)
  end
end
proxy.headerhandler << WsseAuthHeader.new()
... call proxy methods to interact with web service ...
The key thing is to dress up the outgoing header with all the right XML, including Nonce and Created parameters. This code was created by matching the XML generated by the Java code used to interact with this "JAX-WS" web service. All in all, it's a bit of a mess compared to a nice REST style web service. Hopefully the above code will be useful to others who are in a similar situation.

6 May 2009

David Welton: Improving github?

I've written several articles (*) lately that are, if not exactly critical of github, certainly question some of the community dynamics that have sprung up around it. I'm not the only one: http://www.cubiclemuses.com/cm/articles/2009/04/28/a-community-of-rockstars/ However, I think the Github guys have actually done really great work, and done some cool stuff. And I think - and hope - that they're here to stay, so instead of focusing on what's not quite right about it, I thought I'd toss out some ideas on how it could be fixed. Some of them may not be great, but hey, that's what you get for free - go ahead and throw out your own ideas too.
  • When you clone a project, it's techncially a "fork", but it's not necessarily a fork in the real open source sense of "ok, I think I'm better able to develop this code, so I'm going my own way", ala xemacs or x.org, or the bsd's splitting apart. It might be nice if github gave people the means to indicate what sort of fork they're creating - if it's just a place to play with and publish some code, or if they think their code should be the one others reference.
  • Perhaps it should be optional to copy the wiki and issues tabs on your new fork. If you're not really aiming to supplant the main project, do you really need those? You might need the issue tracker.
  • It might be an interesting experiment to let people vote on which one is the main project. Forkers could also indicate which one they want to keep working with as the main branch and maintainer.
  • Perhaps github could add some visual encouragement for people to send their patches on to the main branch of a given project.
Anyway, just a few ideas off the top of my head. (*)

29 April 2009

David Welton: Will the real exception_notification please stand up?

A while ago, I wrote about some concerns of mine regarding git and github. Today, I was looking around, because I wanted to add the exception_notification code to a site of mine, and ran into this: http://github.com/rails/exception_notification/network Scroll all the way to the right, and you'll see that there are a bunch of relatively current forks, and none of them seem to share recent changes. So which one is the 'real' one? My guess would be the one belonging to 'rails', but who knows... maybe that one has been abandoned? Once again, this is nothing 'new': it has always been possible to fork open source code. What I wonder about is the mentality of just going off to work on your own stuff without contributing anything back. The results are a bunch of different forks, each of which may potentially contribute something interesting, but none of which appears to have collected all the new work.

19 April 2009

David Welton: BikeChatter.com: Pro Cycling @ twitter and live Amstel Gold chat

Bicycle racing, especially professional road cycling, is really the only sport I follow, but I do so with a passion. Other people are glued to the TV during soccer games, or football, or basketball, or cricket, or whatever. I'm there during the current spring classics season (my favorite races of the year), and the Giro d'Italia and Tour de France. So it was a cool discovery to find people like Lance Armstrong, Levi Leipheimer, George Hincapie, Robbie McEwen and others using Twitter. Some of them really provide a unique window into the life of a professional bike racer, especially all the things that we don't see outside race day. I figured that if it's interesting to me, it's probably interesting to other people too, so I put together this site to aggregate twitter updates related to professional cycling: http://www.bikechatter.com As an extra, I also added a chat widget from Mibbit.com, in order to make it easy to chat with others while races are going on: http://www.bikechatter.com/chat The next race is the Amstel Gold classic, in the Netherlands, today (Sunday April 19th), at about 15:30 CEST (Rome, Paris, Berlin, etc...). Feel free to join us! The site is quite new, and probably has a few bugs, and as is obvious, my UI ideas are to make things very simple and direct, so any comments or suggestions on how to improve it, or new features you'd like to see are welcome. ... and now I'm off for my Sunday bike ride - see you this afternoon!

17 April 2009

David Welton: Hecl - for Quilting!

Looking through the logs for HeclBuilder.com, I found this site: http://www.patchwork-quilt-forum.de/dreieck-aus-quadrat-t2457-s20.html Which, according to the translation is a discussion on a German site dedicated to patchwork quilting about calculating the right lengths to cut triangles of cloth. I thought it was really cool to see - not because I'm interested in quilting, or the program is anything brilliant (it's simple and functional), but because enabling stuff like this is part of what I built Hecl for: to make mobile phone applications easier, quicker, and simpler to create. Someone went and typed in the code on Heclbuilder, got the program running, and now a number of people have a handy tool to do some calculations for their hobby, which is a heck of a lot easier than fooling around with SDK's, Eclipse or Netbeans, and so on and so forth. I hope to see more of that sort of thing in the future.

16 April 2009

David Welton: Computer People Don't Click on Ads

Ok, so everyone knows that, but I was particularly surprised. LangPop.com got on the front page of Hacker News the other day and I got a ton of hits. But virtually no one clicked on the advertisements - just a few clicks for many thousands of page views. Some of my other sites, which are of a more general-interest nature, do way better with far fewer visitors. Not that I'm really complaining, I did langpop.com for fun, but it's a good reminder that it's a lot better to produce and sell things to a more general audience. Programmers expect, and largely get, most everything for free - me included.

David Welton: Computer People Don't Click on Ads

Ok, so everyone knows that, but I was particularly surprised. LangPop.com got on the front page of Hacker News the other day and I got a ton of hits. But virtually no one clicked on the advertisements - just a few clicks for many thousands of page views. Some of my other sites, which are of a more general-interest nature, do way better with far fewer visitors. Not that I'm really complaining, I did langpop.com for fun, but it's a good reminder that it's a lot better to produce and sell things to a more general audience. Programmers expect, and largely get, most everything for free - me included.

8 April 2009

David Welton: New LangPop.com stats, open source bits and pieces

I released some new statistics on LangPop.com. There are some new things:
  • The normalized results are now user configurable - you can put in your own weights for the various data sources (such as Amazon, Craigslist, and so on), and see how the results change.
  • Freshmeat.net fiddled with their web site, and statistics are not going to be available this month. Hopefully they will be able to correct the problem soon.
  • On the other hand, I wrote some code to grab the data from Ohloh, so there's something new to look at while we wait for Freshmeat to come back on line.
So there is a fair amount going on. Hopefully Freshmeat will come back soon, and I can also add a few fixes to the IRC statistics which I've been thinking about. In the process of doing the above, I also managed to do some open source work, albeit of a minor nature:
  • I updated LangPop.com to use the Flotr Javascript chart library instead of Plotr. So I also updated my Ruby code to integrate it. It's a fairly thin layer at this point, but it does what I need. It's available here: http://github.com/davidw/chartr/tree/master
  • I did some hacking on the Simile Timeline code, (used here on LangPop.com), correcting a bug, and also creating a system to install the whole thing with a simple command. Normally, it's kind of difficult to just use the Simile code on your own site, so I created an (admittedly hacky) way of making it easier to install. That code is here: http://github.com/davidw/standalone-timeplot/tree/master
Oh, yeah, and we moved from Innsbruck, Austria back to Padova, Italy!

David Welton: New LangPop.com stats, open source bits and pieces

I released some new statistics on LangPop.com. There are some new things:
  • The normalized results are now user configurable - you can put in your own weights for the various data sources (such as Amazon, Craigslist, and so on), and see how the results change.
  • Freshmeat.net fiddled with their web site, and statistics are not going to be available this month. Hopefully they will be able to correct the problem soon.
  • On the other hand, I wrote some code to grab the data from Ohloh, so there's something new to look at while we wait for Freshmeat to come back on line.
So there is a fair amount going on. Hopefully Freshmeat will come back soon, and I can also add a few fixes to the IRC statistics which I've been thinking about. In the process of doing the above, I also managed to do some open source work, albeit of a minor nature:
  • I updated LangPop.com to use the Flotr Javascript chart library instead of Plotr. So I also updated my Ruby code to integrate it. It's a fairly thin layer at this point, but it does what I need. It's available here: http://github.com/davidw/chartr/tree/master
  • I did some hacking on the Simile Timeline code, (used here on LangPop.com), correcting a bug, and also creating a system to install the whole thing with a simple command. Normally, it's kind of difficult to just use the Simile code on your own site, so I created an (admittedly hacky) way of making it easier to install. That code is here: http://github.com/davidw/standalone-timeplot/tree/master
Oh, yeah, and we moved from Innsbruck, Austria back to Padova, Italy!

28 March 2009

David Welton: Software Economics - Public Goods

To look at the economics of open source software, you have to start with the economics of software as a category, both proprietary and open source. Note: it should be perfectly obvious to everyone that open source software works, and works quite well for some things. This article is more about understanding the how and they why. Just to avoid any confusion... If you look at software as a product, it has a couple of defining characteristics:
  • It's difficult to keep people from sharing it. Not impossible, but not easy, either. It was already doable in the days of floppy disks, but with the rise of the internet, it has become nearly effortless. This means, in terms of economics, that it's "non excludable" - it's difficult to keep everyone from enjoying it once you've created it and started to distribute it.
  • If you give a copy of a program to a friend, it in no way detracts from your own use of the program. Quite the contrary, it may even make your use of it better, if, say, your friend discovers how to use a cool feature, or writes a handy extension. This is different from traditional goods like bicycles. If you loan me your bicycle, you can't use it to get around. In economics, things like software (or radio or over the air TV) are called 'non rivalrous' goods - many people can take advantage of them without ruining them.
What do you get when you combine something that's "non excludable" and "non rivalrous"? In economics, these are known as "public goods": http://en.wikipedia.org/wiki/Public_good - read the whole thing if you have a few minutes, it's what I'll be talking about. As per the article, "The Problem" as it were, is the free rider problem. Let's stop and look at a contrived example: Bob is an ex-dentist and really knows what it would take to write a great program for managing a dentist's office (or pick your own example... it's contrived, don't quibble about the details). He's also a good programmer, with the skills necessary to implement the program. He talks to a few of his dentist friends, and they're enthusiastic about the whole thing. Let's look at a few scenarios of how things might play out: Bob values his time at 10 dollars an hour, and it will take him 100 hours to complete the project, meaning the whole project would cost about 1000 dollars. One way things could work is that he could find a dentist friend who needs this program, and bill him 1000$ for his time and services, bang out the code, and release it as open source software. Bob gets his money, the dentist gets his code... and all the other dentists in town get it for free, which is bound to make the dentist who shelled out the money a bit irritated, given that he's a human, not a homo-economus, and doesn't like paying and see others get the same thing for free. Let's introduce another variable: the software is only really worth 200$ to the dentist - any more than that and yeah, it's helpful, but not worth that much money (And please stay with me, I know it's contrived, but keep in mind that the situation *is* possible, even if the numbers might be different). That means that if Bob wants 1000$ for his time, but the dentist will only pay 200$, then no transaction will occur! The software won't get written, Bob won't get any money, and the dentist will be worse off because he won't have the nice program, and neither will his dentist colleagues. One way things might still work is if the dentist rounds up some friends and they all contribute a bit, however, that's kind of a pain in the neck for everyone concerned - the dentist doesn't want to get into the software business and spend a bunch of time trying to chase his friends for money, and even if 10 dentists contribute, the ideal position to be in his the 11th guy, who pays nothing, and still gets the software for free. So it's in everyone's interests to not return the dentist's calls in the hope of being the 11th guy. Also, none of them gets the software until they're all on board. So, how to resolve this problem? The wikipedia page talks about introducing an exclusion mechanism, which in this case would be a copyright system so that Bob can sell a copy of his software for 100$ and be sure that it won't be open to everyone to use. This way, the dentists get the software for 100$ less than they value it at (200$), and as soon as Bob signs up an 11th dentist, he's making more than his time/materials costs, and is therefore coming out ahead! The dentists all know that they're paying the same price, so have no reason to grumble about free riders. In short, everyone is pretty happy. Of course, in the real world, things don't play out like that all the time. There are problems with the simplified example above, some of which are very evident: the cost of enforcing copyright laws, in an age when copying is extremely easy, is very high and potentially very intrusive. However, "intellectual property" is, by and large, a compromise solution that has had positive aspects, especially when you ignore the outliers like Microsoft, and look at all kinds of niche software vendors, who make a nice living, create good products, and have happy, satisfied customers. If you look at the other solutions to the free rider problem listed on the wikipedia page, we can see how they might be applied to the world of software.
  • Dominant assurance contracts
    Assurance contracts are contracts in which participants make a binding pledge to contribute to a contract for building a public good, contingent on a quorum of a predetermined size being reached. Otherwise their money is refunded. A dominant assurance contract is a variation in which an entrepreneur creates the contract and refunds the initial pledge plus an additional sum of money if the quorum is not reached. In game theory terms this makes pledging to build the public good a dominant strategy: the best move is to pledge to the contract regardless of the actions of others.
    This means that Bob goes out and gets a number of dentists to pledge 100$ to his dentist program, and if he doesn't raise at least 1000$, he'll give them each back 110$. So it's a clever solution that works out for everyone, but is still a lot fiddlier than the copyright system - Bob has to go sell the contracts and explain how things work to a bunch of people before he can get started. This might be doable with 10 dentists, but for a more mass-market sort of program, it would not be feasible.
  • Coasian solution
    a mechanism by which potential beneficiaries of a public good band together and pool their resources based on their willingness to pay to create the public good. Coase (1960) argued that if the transaction costs between potential beneficiaries of a public good are sufficiently low, and it is therefore easy for beneficiaries to find each other and pool their money based on the public good's value to them, then an adequate level of public goods production can occur even under competitive free market conditions.
    That sounds an awful lot like open source software, especially the kind espoused by groups like the Apache Software Foundation, where making free software is not a moral imperative, but a good way of producing something that is not necessarily a key business component. This has proven to work very well for infrastructure type code, as well as lots of developer tools. It is less proven as a way to develop end-user software - in the example above, it's not like Bob needs help to develop his system, or that the dentists really want to contribute - they just want a working program and don't want to get involved in its production.
  • Government provision This would mean that the government would be responsible for funding the production of open source software. I'm no free-market zealot, but I think the idea of the government being responsible for software products is not one I am entirely comfortable with. Of course, I do think the government has a role with places like universities, where people can do "research" in the sense of hacking on cool systems just to see what can be done, without necessarily having to be thinking of how to make a profit in the short to medium term. Software like BSD, Tcl, and plenty of other great stuff has come out of universities, meaning that in part it is ultimately funded by the government and taxes. The problem, though, is the process of refining those things down into something people are willing to buy. Would Bob go to a local government official to get a grant to produce his software? Why should Bob get the contract and not some other guy? Does the government official know enough about code or dentists to determine who should write the program?
  • Subsidies Subsidies might work to encourage software production, but would probably simply be abused. It's probably not as relevant as other potential solutions. What form would it take? 1$ off your taxes per line of code written? It would be difficult to place a value on anything, and might be quite difficult to implement.
  • Privileged group This, as the wikipedia page says, is an incomplete solution, and is less generally applicable. In terms of Bob, it might mean that instead of valuing his code at 200$, his wealthy dentist friend with a large practice really needs the code - it's worth 2000$ to him, and can pay Bob the full 1000$ to develop it out of pocket and still come out ahead, and he doesn't really care that much about the free riders because he's getting what he needs and the rest doesn't matter too much.
  • Social norms If Bob and the dentists live in a small town, and are all good friends, perhaps Bob could still release the software, and even though the other dentists could copy and use it for free, they don't, because they feel an obligation to Bob to help him out for the work he's done. Even though they could take advantage of it for free, they would feel bad about doing so, and so each chip in 100$, which after enough people contribute, is enough to cover Bob's costs. It's likely that anything distributed on a larger scale, however, will see more free-riding, and "please pay!" might not work out. And it's probably fairly distressful for a developer to make that jump, knowing he's at the mercy of other people's good will.
None of these solutions is perfect, and all, including exclusion in the form of intellectual property laws, or simply doing nothing at all, have problems of their own. Due to the very nature of software, this is somewhat inevitable, and the best we can do is come up with good compromises, and continue to reevaluate them as technology and society change (this is something that needs to happen with IP laws, for instance).

27 March 2009

David Welton: CodingHorror and Open Source Economics

Jeff Atwood writes about the economics of open source software: http://www.codinghorror.com/blog/archives/001247.html Well, he actually doesn't say as much, but that's what it's about. Someone really ought to do a book about this subject. I have some ideas - any takers? It's always tough to write about because there's so much material. It's a topic that is near and dear to my heart - almost 10 years ago, I joined the Free Software Business mailing list, as I got curious about the intersection of free software and business, and how the whole thing worked. I've learned a lot in the meantime, including a stint at Linuxcare, which was one of the Linux companies during the dot com boom, and am still fascinated by the subject. Before we get started, let's reiterate something:
  • It's clear that open source software works. There's just no doubt about it - it's been through ups and downs, the dot com boom and bust, and it will trundle happily (well, as happy as anyone is with this economy) through the recession too.
That point bears repeating. Everything else needs to take it into consideration. Could it work better? Differently? Perhaps, but it does work, so you need to understand it very well before you fiddle with it. Jeff writes:
for the average user? Heck, how realistic is this for the average programmer? Even if you're the type of macho, gung-ho programmer who can master an alien code base just to get some small pet feature or bugfix in -- do you honestly have the kind of time it would take to do that? Sometimes, when people say this:
The source code is freely available. If you feel so strongly about this bugfix/tweak/feature/plugin, why don't you code it yourself?
They're really saying this:
F**k you.
Which is of course a terrible analysis of open source, and its pros and cons. I wrote the following comment on Hacker News:
Heck, how realistic is this for the average programmer? ...
"Actually, I have submitted lots of (mostly small and inconsequential) bugs and minor features over the years, to projects such as the Linux Kernel, Tcl, Erlang, Ruby, Rails, Apache, and probably lots of others I'm forgetting right now. I actually enjoy it quite a bit, come to think of it - there's something cool about diving in and studying something new and different, and a thrill that comes with nailing the bug. Sometimes, the knowledge required to actually fix it is too much, and you have to settle for sending in a good bug report, but in other cases it's very much possible to hack up quick, useful things despite not knowing much about the system in question. And, no, I'm not really that great a programmer... I'd consider myself fairly average." And I know I'm not alone, as I see similar sorts of people in Debian and the Apache Software Foundation. Debian, infact, is all about those kinds of tweaks to improve the operating system as a whole. And this sort of exchange goes on all the time, as evidenced by the huge success of a large number of open source projects. Now, granted, most projects are really driven by one or a few really committed hackers, who do the lion's share of the work. However, that large network of people who contribute, test, document, and suggest is certainly important to any open source project. As long as we're looking at my anecdote, let's look at it in a bit more depth - most of those projects are developer tools or closely related. A cynic might note that Jeff comes from the world of Microsoft, where the core developer tools are provided by a company and 'giving back' is limited to payments and bug reports. But leaving that be, I think the enormous success of stuff like Ruby, Perl, PHP, Python, Tcl, Apache, Linux, GCC, and on and on and on indicates that, at least in terms of stuff that developers share between one another, open source works. However, there are problems, one of which is that he (or, in unfortunately rather rarer cases, she) who writes the code does not necessarily get the money. And without money, he or she who writes the code must dedicate themselves to some means to actually accumulate a bit of money in order to pay for living expenses. Most likely, this is time taken away from the open source project, which is a loss for all the people who benefit from it. Proprietary software solves this feedback loop in a neater way (generally) - companies that create good products get money for their efforts, which can then be reinvested in development. Jeff suggests that "sponsorship seems like a constructive way for people who are unable or unwilling to write code to affect the direction of a project.", which is ok as far as it goes, and more or less works here and there, but hopefully he's not thinking about trying it on a larger scale. This sort of thing has been tried before, and never really seems to take off. Part of the problem is that it can work on a person-to-person basis, but is almost impossible to standardize in a way that it makes sense to have some kind of clearinghouse that operates as a business. There are simply too many factors - what kind of open source project it is, what motivates the people behind it, how the transaction costs of defining a specification, monitoring the results, sending money and so on compare to the actual value of a fix... the list goes on. Ultimately, it's a nice idea, but it doesn't seem to work out too well in practice. Anyway, while it's a good thought on Jeff's part, at the end of the day, it is fairly evident that he doesn't have a lot of first hand knowledge of open source business and economics. That said, to some degree, open source took everyone by surprise, and, lacking the nice, simple feedback loop that proprietary software has, can be a lot more difficult to get a handle on. I find it quite pleasant that way - it attracts both hard-headed business types and social-experiment idealist visionaries; both huge corporations (IBM!) and a huge number of individuals; both people who have gotten quite wealthy from open source as well as most of the rest of us who manage to make ends meet but still love it. It's not something that's easy to pigeonhole, and as such it's hard enough to figure out the many ways in which it does work, let alone figure out how to improve on it. Stay tuned for further installments: Software Economics - Public Goods

Next.

Previous.